package com.eryos.gwt.estate.client.factory;

import com.eryos.gwt.estate.client.i18n.Messages;
import com.eryos.gwt.estate.client.view.ErrorView;
import com.eryos.gwt.estate.client.view.HomeView;
import com.eryos.gwt.estate.core.service.ConfigServiceAsync;
import com.eryos.gwt.estate.core.service.GreetingServiceAsync;
import com.eryos.gwt.estate.moduleA.client.view.ModuleAView;
import com.google.gwt.place.shared.PlaceController;
import com.google.web.bindery.event.shared.EventBus;

/**
 * A ClientFactory is helpful to use a factory or dependency injection framework like GIN to obtain references to
 * objects needed throughout application like the event bus.
 * 
 * An example is to use ClientFactory to provide EventBus, GWT PlaceController, and view implementations.
 * 
 * @author combeol
 * @version $Revision$
 */
public interface ClientFactory {

    /**
     * @return
     */
    EventBus getEventBus();

    /**
     * @return
     */
    PlaceController getPlaceController();

    /************ All Views ************/

    /**
     * @return
     */
    HomeView getHomeView();

    ErrorView getErrorView();

    ModuleAView getModuleAView();

    /************ All Services ************/

    /**
     * @return
     */
    GreetingServiceAsync getGreetingService();

    /**
     * @return
     */
    ConfigServiceAsync getConfigService();

    Messages getMessages();

}
